home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / assembler / progasm1.lha / SORGENTI2 / LEZIONE4c.s < prev    next >
Text File  |  1994-10-30  |  18KB  |  510 lines

  1.  
  2. ; Lezione4c.s    FUSIONE DI 3 EFFETTI COPPER + FIGURA AD 8 COLORI
  3.  
  4.     SECTION    CiriCop,CODE
  5.  
  6. Inizio:
  7.     move.l    4.w,a6        ; Execbase in a6
  8.     jsr    -$78(a6)    ; Disable - ferma il multitasking
  9.     lea    GfxName(PC),a1    ; Indirizzo del nome della lib da aprire in a1
  10.     jsr    -$198(a6)    ; OpenLibrary
  11.     move.l    d0,GfxBase    ; salvo l'indirizzo base GFX in GfxBase
  12.     move.l    d0,a6
  13.     move.l    $26(a6),OldCop    ; salviamo l'indirizzo della copperlist vecchia
  14.  
  15. ;*****************************************************************************
  16. ;    FACCIAMO PUNTARE I BPLPOINTERS NELLA COPPELIST AI NOSTRI BITPLANES
  17. ;*****************************************************************************
  18.  
  19.  
  20.     MOVE.L    #PIC,d0        ; in d0 mettiamo l'indirizzo della PIC,
  21.                 ; ossia dove inizia il primo bitplane
  22.  
  23.     LEA    BPLPOINTERS,A1    ; in a1 mettiamo l'indirizzo dei
  24.                 ; puntatori ai planes della COPPERLIST
  25.     MOVEQ    #2,D1        ; numero di bitplanes -1 (qua sono 3)
  26.                 ; per eseguire il ciclo col DBRA
  27. POINTBP:
  28.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  29.                 ; nella word giusta nella copperlist
  30.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  31.                 ; mettendo la word ALTA al posto di quella
  32.                 ; BASSA, permettendone la copia col move.w!!
  33.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  34.                 ; nella word giusta nella copperlist
  35.     swap    d0        ; scambia le 2 word di d0 (es: 3412 > 1234)
  36.                 ; rimettendo a posto l'indirizzo.
  37.     ADD.L    #40*256,d0    ; Aggiungiamo 10240 ad D0, facendolo puntare
  38.                 ; al secondo bitplane (si trova dopo il primo)
  39.                 ; (cioe' aggiungiamo la lunghezza di un plane)
  40.                 ; Nei cicli seguenti al primo faremo puntare
  41.                 ; al terzo, al quarto bitplane eccetera.
  42.  
  43.     addq.w    #8,a1        ; a1 ora contiene l'indirizzo dei prossimi
  44.                 ; bplpointers nella copperlist da scrivere.
  45.     dbra    d1,POINTBP    ; Rifai D1 volte POINTBP (D1=num of bitplanes)
  46.  
  47. ;
  48.  
  49.     move.l    #COPPERLIST,$dff080    ; Puntiamo la nostra COP
  50.     move.w    d0,$dff088        ; Facciamo partire la COP
  51.  
  52.     move.w    #0,$dff1fc        ; FMODE - Disattiva l'AGA
  53.     move.w    #$c00,$dff106        ; BPLCON3 - Disattiva l'AGA
  54.  
  55. mouse:
  56.     cmpi.b    #$ff,$dff006    ; Siamo alla linea 255?
  57.     bne.s    mouse        ; Se non ancora, non andare avanti
  58.  
  59.     bsr.w    muovicopper    ; barra rossa sotto linea $ff
  60.     bsr.w    CopperDestSin    ; Routine di scorrimento destra/sinistra
  61.     BSR.w    scrollcolors    ; scorrimento ciclico dei colori
  62.  
  63. Aspetta:
  64.     cmpi.b    #$ff,$dff006    ; Siamo alla linea 255?
  65.     beq.s    Aspetta        ; Se si, non andare avanti, aspetta la linea
  66.                 ; seguente, altrimenti MuoviCopper viene
  67.                 ; rieseguito
  68.  
  69.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  70.     bne.s    mouse        ; se no, torna a mouse:
  71.  
  72.  
  73.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  74.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  75.  
  76.     move.l    4.w,a6
  77.     jsr    -$7e(a6)    ; Enable - riabilita il Multitasking
  78.     move.l    gfxbase(PC),a1    ; Base della libreria da chiudere
  79.     jsr    -$19e(a6)    ; Closelibrary - chiudo la graphics lib
  80.     rts            ; USCITA DAL PROGRAMMA
  81.  
  82.  
  83. ;    Dati
  84.  
  85. GfxName:
  86.     dc.b    "graphics.library",0,0    
  87.  
  88. GfxBase:        ; Qua ci va l'indirizzo di base per gli Offset
  89.     dc.l    0    ; della graphics.library
  90.  
  91. OldCop:            ; Qua ci va l'indirizzo della vecchia COP di sistema
  92.     dc.l    0
  93.  
  94. ; **************************************************************************
  95. ; *        BARRA A SCORRIMENTO ORIZZONTALE (Lezione3h.s)           *
  96. ; **************************************************************************
  97.  
  98. CopperDESTSIN:
  99.     CMPI.W    #85,DestraFlag        ; VAIDESTRA eseguita 85 volte?
  100.     BNE.S    VAIDESTRA        ; se non ancora, rieseguila
  101.     CMPI.W    #85,SinistraFlag    ; VAISINISTRA eseguita 85 volte?
  102.     BNE.S    VAISINISTRA        ; se non ancora, rieseguila
  103.     CLR.W    DestraFlag    ; la routine VAISINISTRA e' stata eseguita
  104.     CLR.W    SinistraFlag    ; 85 volte, riparti
  105.     RTS            ; TORNIAMO AL LOOP mouse
  106.  
  107.  
  108. VAIDESTRA:            ; questa routine sposta la barra verso DESTRA
  109.     lea    CopBar+1,A0    ; Mettiamo in A0 l'indirizzo del primo XX
  110.     move.w    #29-1,D2    ; dobbiamo cambiare 29 wait (usiamo un DBRA)
  111. DestraLoop:
  112.     addq.b    #2,(a0)        ; aggiungiamo 2 alla coordinata X del wait
  113.     ADD.W    #16,a0        ; andiamo al prossimo wait da cambiare
  114.     dbra    D2,DestraLoop    ; ciclo eseguito d2 volte
  115.     addq.w    #1,DestraFlag    ; segnamo che abbiamo eseguito VAIDESTRA
  116.     RTS            ; TORNIAMO AL LOOP mouse
  117.  
  118.  
  119. VAISINISTRA:            ; questa routine sposta la barra verso SINISTRA
  120.     lea    CopBar+1,A0
  121.     move.w    #29-1,D2    ; dobbiamo cambiare 29 wait
  122. SinistraLoop:
  123.     subq.b    #2,(a0)        ; sottraiamo 2 alla coordinata X del wait
  124.     ADD.W    #16,a0        ; andiamo al prossimo wait da cambiare
  125.     dbra    D2,SinistraLoop    ; ciclo eseguito d2 volte
  126.     addq.w    #1,SinistraFlag ; Annotiamo lo spostamento
  127.     RTS            ; TORNIAMO AL LOOP mouse
  128.  
  129.  
  130. DestraFlag:        ; In questa word viene tenuto il conto delle volte
  131.     dc.w    0    ; che e' stata eseguita VAIDESTRA
  132.  
  133. SinistraFlag:        ; In questa word viene tenuto il conto delle volte
  134.     dc.w    0    ; che e' stata eseguita VAISINISTRA
  135.  
  136. ; **************************************************************************
  137. ; *        BARRA ROSSA SOTTO LA LINEA $FF (Lezione3f.s)           *
  138. ; **************************************************************************
  139.  
  140. MuoviCopper:
  141.     LEA    BARRA,a0
  142.     TST.B    SuGiu        ; Dobbiamo salire o scendere?
  143.     beq.w    VAIGIU
  144.     cmpi.b    #$0a,(a0)    ; siamo arrivati alla linea $0a+$ff? (265)
  145.     beq.s    MettiGiu    ; se si, siamo in cima e dobbiamo scendere
  146.     subq.b    #1,(a0)
  147.     subq.b    #1,8(a0)    ; ora cambiamo gli altri wait: la distanza
  148.     subq.b    #1,8*2(a0)    ; tra un wait e l'altro e' di 8 bytes
  149.     subq.b    #1,8*3(a0)
  150.     subq.b    #1,8*4(a0)
  151.     subq.b    #1,8*5(a0)
  152.     subq.b    #1,8*6(a0)
  153.     subq.b    #1,8*7(a0)    ; qua dobbiamo modificare tutti i 9 wait della
  154.     subq.b    #1,8*8(a0)    ; barra rossa ogni volta per farla salire!
  155.     subq.b    #1,8*9(a0)
  156.     rts
  157.  
  158. MettiGiu:
  159.     clr.b    SuGiu        ; Azzerando SuGiu, al TST.B SuGiu il BEQ
  160.     rts            ; fara' saltare alla routine VAIGIU, e
  161.                 ; la barra scedera'
  162.  
  163. VAIGIU:
  164.     cmpi.b    #$2c,8*9(a0)    ; siamo arrivati alla linea $2c?
  165.     beq.s    MettiSu        ; se si, siamo in fondo e dobbiamo risalire
  166.     addq.b    #1,(a0)
  167.     addq.b    #1,8(a0)    ; ora cambiamo gli altri wait: la distanza
  168.     addq.b    #1,8*2(a0)    ; tra un wait e l'altro e' di 8 bytes
  169.     addq.b    #1,8*3(a0)
  170.     addq.b    #1,8*4(a0)
  171.     addq.b    #1,8*5(a0)
  172.     addq.b    #1,8*6(a0)
  173.     addq.b    #1,8*7(a0)    ; qua dobbiamo modificare tutti i 9 wait della
  174.     addq.b    #1,8*8(a0)    ; barra rossa ogni volta per farla scendere!
  175.     addq.b    #1,8*9(a0)
  176.     rts
  177.  
  178. MettiSu:
  179.     move.b    #$ff,SuGiu    ; Quando la label SuGiu non e' a zero,
  180.     rts            ; significa che dobbiamo risalire.
  181.  
  182.  
  183. SuGiu:
  184.     dc.b    0,0
  185.  
  186. ; **************************************************************************
  187. ; *        SCORRIMENTO CICLICO DEI COLORI (Lezione3E.s)           *
  188. ; **************************************************************************
  189.  
  190. Scrollcolors:    
  191.     move.w    col2,col1    ; col2 copiato in col1
  192.     move.w    col3,col2    ; col3 copiato in col2
  193.     move.w    col4,col3    ; col4 copiato in col3
  194.     move.w    col5,col4    ; col5 copiato in col4
  195.     move.w    col6,col5    ; col6 copiato in col5
  196.     move.w    col7,col6    ; col7 copiato in col6
  197.     move.w    col8,col7    ; col8 copiato in col7
  198.     move.w    col9,col8    ; col9 copiato in col8
  199.     move.w    col10,col9    ; col10 copiato in col9
  200.     move.w    col11,col10    ; col11 copiato in col10
  201.     move.w    col12,col11    ; col12 copiato in col11
  202.     move.w    col13,col12    ; col13 copiato in col12
  203.     move.w    col14,col13    ; col14 copiato in col13
  204.     move.w    col1,col14    ; col1 copiato in col14
  205.     rts
  206.  
  207. ; **************************************************************************
  208. ; *                SUPER COPPERLIST               *
  209. ; **************************************************************************
  210.  
  211.     SECTION    GRAPHIC,DATA_C
  212.  
  213. COPPERLIST:
  214.  
  215.     ; Facciamo puntare gli sprite a ZERO, per eliminarli, o ce li troviamo
  216.     ; in giro impazziti a disturbare!!!
  217.  
  218.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000
  219.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  220.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  221.     dc.w    $13e,$0000
  222.  
  223.     dc.w    $8e,$2c81    ; DiwStrt    (registri con valori normali)
  224.     dc.w    $90,$2cc1    ; DiwStop
  225.     dc.w    $92,$0038    ; DdfStart
  226.     dc.w    $94,$00d0    ; DdfStop
  227.     dc.w    $102,0        ; BplCon1
  228.     dc.w    $104,0        ; BplCon2
  229.     dc.w    $108,0        ; Bpl1Mod
  230.     dc.w    $10a,0        ; Bpl2Mod
  231.  
  232. ; Il BPLCON0 per uno schermo a 3 bitplanes: (8 colori)
  233.  
  234.             ; 5432109876543210
  235.     dc.w    $100,%0011001000000000    ; bits 13 e 12 accesi!! (3 = %011)
  236.  
  237. ;    Facciamo puntare i bitplanes direttamente mettendo nella copperlist
  238. ;    i registri $dff0e0 e seguenti qua di seguito con gli indirizzi
  239. ;    dei bitplanes che saranno messi dalla routine POINTBP
  240.  
  241. BPLPOINTERS:
  242.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane - BPL0PT
  243.     dc.w $e4,$0000,$e6,$0000    ;secondo bitplane - BPL1PT
  244.     dc.w $e8,$0000,$ea,$0000    ;terzo     bitplane - BPL2PT
  245.  
  246. ;    L'effetto di Lezione3e.s spostato piu' in ALTO
  247.  
  248.     dc.w    $3a07,$fffe    ; aspettiamo la linea 154 ($9a in esadecimale)
  249.     dc.w    $180        ; REGISTRO COLOR0
  250. col1:
  251.     dc.w    $0f0        ; VALORE DEL COLOR 0 (che sara' modificato)
  252.     dc.w    $3b07,$fffe ; aspettiamo la linea 155 (non sara' modificata)
  253.     dc.w    $180        ; REGISTRO COLOR0 (non sara' modificato)
  254. col2:
  255.     dc.w    $0d0        ; VALORE DEL COLOR 0 (sara' modificato)
  256.     dc.w    $3c07,$fffe    ; aspettiamo la linea 156 (non modificato,ecc.)
  257.     dc.w    $180        ; REGISTRO COLOR0
  258. col3:
  259.     dc.w    $0b0        ; VALORE DEL COLOR 0
  260.     dc.w     $3d07,$fffe    ; aspettiamo la linea 157
  261.     dc.w    $180        ; REGISTRO COLOR0
  262. col4:
  263.     dc.w    $090        ; VALORE DEL COLOR 0
  264.     dc.w    $3e07,$fffe    ; aspettiamo la linea 158
  265.     dc.w    $180        ; REGISTRO COLOR0
  266. col5:
  267.     dc.w    $070        ; VALORE DEL COLOR 0
  268.     dc.w    $3f07,$fffe    ; aspettiamo la linea 159
  269.     dc.w    $180        ; REGISTRO COLOR0
  270. col6:
  271.     dc.w    $050        ; VALORE DEL COLOR 0
  272.     dc.w    $4007,$fffe    ; aspettiamo la linea 160
  273.     dc.w    $180        ; REGISTRO COLOR0
  274. col7:
  275.     dc.w    $030        ; VALORE DEL COLOR 0
  276.     dc.w    $4107,$fffe    ; aspettiamo la linea 161
  277.     dc.w    $180        ; color0... (ora avete capito i commenti,
  278. col8:                ; posso anche smettere di metterli da qua!)
  279.     dc.w    $030
  280.     dc.w    $4207,$fffe    ; linea 162
  281.     dc.w    $180
  282. col9:
  283.     dc.w    $050
  284.     dc.w    $4307,$fffe    ;  linea 163
  285.     dc.w    $180
  286. col10:
  287.     dc.w    $070
  288.     dc.w    $4407,$fffe    ;  linea 164
  289.     dc.w    $180
  290. col11:
  291.     dc.w    $090
  292.     dc.w    $4507,$fffe    ;  linea 165
  293.     dc.w    $180
  294. col12:
  295.     dc.w    $0b0
  296.     dc.w    $4607,$fffe    ;  linea 166
  297.     dc.w    $180
  298. col13:
  299.     dc.w    $0d0
  300.     dc.w    $4707,$fffe    ;  linea 167
  301.     dc.w    $180
  302. col14:
  303.     dc.w    $0f0
  304.     dc.w     $4807,$fffe    ;  linea 168
  305.  
  306.     dc.w     $180,$0000    ; Decidiamo il colore NERO per la parte
  307.                 ; di schermo sotto l'effetto
  308.  
  309.  
  310.     dc.w    $0180,$000    ; color0
  311.     dc.w    $0182,$550    ; color1    ; ridefiniamo il colore della
  312.     dc.w    $0184,$ff0    ; color2    ; scritta COMMODORE! GIALLA!
  313.     dc.w    $0186,$cc0    ; color3
  314.     dc.w    $0188,$990    ; color4
  315.     dc.w    $018a,$220    ; color5
  316.     dc.w    $018c,$770    ; color6
  317.     dc.w    $018e,$440    ; color7
  318.  
  319.     dc.w    $7007,$fffe    ; Aspettiamo la fine della scritta COMMODORE
  320.  
  321. ;    Gli 8 colori della figura sono definiti qui:
  322.  
  323.     dc.w    $0180,$000    ; color0
  324.     dc.w    $0182,$475    ; color1
  325.     dc.w    $0184,$fff    ; color2
  326.     dc.w    $0186,$ccc    ; color3
  327.     dc.w    $0188,$999    ; color4
  328.     dc.w    $018a,$232    ; color5
  329.     dc.w    $018c,$777    ; color6
  330.     dc.w    $018e,$444    ; color7
  331.  
  332. ;    EFFETTO DELLA LEZIONE3h.s
  333.  
  334.     dc.w    $9007,$fffe    ; aspettiamo l'inizio della linea
  335.     dc.w    $180,$000    ; grigio al minimo, ossia NERO!!!
  336. CopBar:
  337.     dc.w    $9031,$fffe    ; wait che cambiamo ($9033,$9035,$9037...)
  338.     dc.w    $180,$100    ; colore rosso
  339.     dc.w    $9107,$fffe    ; wait che non cambiamo (Inizio linea)
  340.     dc.w    $180,$111    ; colore GRIGIO (parte dall'inizio linea fino
  341.     dc.w    $9131,$fffe    ; a questo WAIT, che noi cambiaremo...
  342.     dc.w    $180,$200    ; dopo il quale comincia il ROSSO
  343.  
  344. ;        WAIT FISSI (poi grigio) - WAIT DA CAMBIARE (seguiti dal rosso)
  345.  
  346.     dc.w    $9207,$fffe,$180,$222,$9231,$fffe,$180,$300 ; linea 3
  347.     dc.w    $9307,$fffe,$180,$333,$9331,$fffe,$180,$400 ; linea 4
  348.     dc.w    $9407,$fffe,$180,$444,$9431,$fffe,$180,$500 ; linea 5
  349.     dc.w    $9507,$fffe,$180,$555,$9531,$fffe,$180,$600 ; ....
  350.     dc.w    $9607,$fffe,$180,$666,$9631,$fffe,$180,$700
  351.     dc.w    $9707,$fffe,$180,$777,$9731,$fffe,$180,$800
  352.     dc.w    $9807,$fffe,$180,$888,$9831,$fffe,$180,$900
  353.     dc.w    $9907,$fffe,$180,$999,$9931,$fffe,$180,$a00
  354.     dc.w    $9a07,$fffe,$180,$aaa,$9a31,$fffe,$180,$b00
  355.     dc.w    $9b07,$fffe,$180,$bbb,$9b31,$fffe,$180,$c00
  356.     dc.w    $9c07,$fffe,$180,$ccc,$9c31,$fffe,$180,$d00
  357.     dc.w    $9d07,$fffe,$180,$ddd,$9d31,$fffe,$180,$e00
  358.     dc.w    $9e07,$fffe,$180,$eee,$9e31,$fffe,$180,$f00
  359.     dc.w    $9f07,$fffe,$180,$fff,$9f31,$fffe,$180,$e00
  360.     dc.w    $a007,$fffe,$180,$eee,$a031,$fffe,$180,$d00
  361.     dc.w    $a107,$fffe,$180,$ddd,$a131,$fffe,$180,$c00
  362.     dc.w    $a207,$fffe,$180,$ccc,$a231,$fffe,$180,$b00
  363.     dc.w    $a307,$fffe,$180,$bbb,$a331,$fffe,$180,$a00
  364.     dc.w    $a407,$fffe,$180,$aaa,$a431,$fffe,$180,$900
  365.     dc.w    $a507,$fffe,$180,$999,$a531,$fffe,$180,$800
  366.     dc.w    $a607,$fffe,$180,$888,$a631,$fffe,$180,$700
  367.     dc.w    $a707,$fffe,$180,$777,$a731,$fffe,$180,$600
  368.     dc.w    $a807,$fffe,$180,$666,$a831,$fffe,$180,$500
  369.     dc.w    $a907,$fffe,$180,$555,$a931,$fffe,$180,$400
  370.     dc.w    $aa07,$fffe,$180,$444,$aa31,$fffe,$180,$301
  371.     dc.w    $ab07,$fffe,$180,$333,$ab31,$fffe,$180,$202
  372.     dc.w    $ac07,$fffe,$180,$222,$ac31,$fffe,$180,$103
  373.     dc.w    $ad07,$fffe,$180,$113,$ad31,$fffe,$180,$004
  374.  
  375.     dc.w    $ae07,$FFFE    ; prossima linea
  376.     dc.w    $180,$006    ; blu a 6
  377.     dc.w    $b007,$FFFE    ; salto 2 linee
  378.     dc.w    $180,$007    ; blu a 7
  379.     dc.w    $b207,$FFFE    ; sato 2 linee
  380.     dc.w    $180,$008    ; blu a 8
  381.     dc.w    $b507,$FFFE    ; salto 3 linee
  382.     dc.w    $180,$009    ; blu a 9
  383.     dc.w    $b807,$FFFE    ; salto 3 linee
  384.     dc.w    $180,$00a    ; blu a 10
  385.     dc.w    $bb07,$FFFE    ; salto 3 linee
  386.     dc.w    $180,$00b    ; blu a 11
  387.     dc.w    $be07,$FFFE    ; salto 3 linee
  388.     dc.w    $180,$00c    ; blu a 12
  389.     dc.w    $c207,$FFFE    ; salto 4 linee
  390.     dc.w    $180,$00d    ; blu a 13
  391.     dc.w    $c707,$FFFE    ; salto 7 linee
  392.     dc.w    $180,$00e    ; blu a 14
  393.     dc.w    $ce07,$FFFE    ; salto 6 linee
  394.     dc.w    $180,$00f    ; blu a 15
  395.     dc.w    $d807,$FFFE    ; salto 10 linee
  396.     dc.w    $180,$11F    ; schiarisco...
  397.     dc.w    $e807,$FFFE    ; salto 16 linee
  398.     dc.w    $180,$22F    ; schiarisco...
  399.  
  400. ;    Effetto della lezione3f.s
  401.  
  402.     dc.w    $ffdf,$fffe    ; ATTENZIONE! WAIT ALLA FINE LINEA $FF!
  403.                 ; i wait dopo questo sono sotto la linea
  404.                 ; $FF e ripartono da $00!!
  405.  
  406.     dc.w    $0107,$FFFE    ; una barretta fissa verde SOTTO la linea $FF!
  407.     dc.w    $180,$010
  408.     dc.w    $0207,$FFFE
  409.     dc.w    $180,$020
  410.     dc.w    $0307,$FFFE
  411.     dc.w    $180,$030
  412.     dc.w    $0407,$FFFE
  413.     dc.w    $180,$040
  414.     dc.w    $0507,$FFFE
  415.     dc.w    $180,$030
  416.     dc.w    $0607,$FFFE
  417.     dc.w    $180,$020
  418.     dc.w    $0707,$FFFE
  419.     dc.w    $180,$010
  420.     dc.w    $0807,$FFFE
  421.     dc.w    $180,$000
  422.  
  423. BARRA:
  424.     dc.w    $0907,$FFFE    ; aspetto la linea $79
  425.     dc.w    $180,$300    ; inizio la barra rossa: rosso a 3
  426.     dc.w    $0a07,$FFFE    ; linea seguente
  427.     dc.w    $180,$600    ; rosso a 6
  428.     dc.w    $0b07,$FFFE
  429.     dc.w    $180,$900    ; rosso a 9
  430.     dc.w    $0c07,$FFFE
  431.     dc.w    $180,$c00    ; rosso a 12
  432.     dc.w    $0d07,$FFFE
  433.     dc.w    $180,$f00    ; rosso a 15 (al massimo)
  434.     dc.w    $0e07,$FFFE
  435.     dc.w    $180,$c00    ; rosso a 12
  436.     dc.w    $0f07,$FFFE
  437.     dc.w    $180,$900    ; rosso a 9
  438.     dc.w    $1007,$FFFE
  439.     dc.w    $180,$600    ; rosso a 6
  440.     dc.w    $1107,$FFFE
  441.     dc.w    $180,$300    ; rosso a 3
  442.     dc.w    $1207,$FFFE
  443.     dc.w    $180,$000    ; colore NERO
  444.  
  445.     dc.w    $FFFF,$FFFE    ; FINE DELLA COPPERLIST
  446.  
  447.  
  448. ; **************************************************************************
  449. ; *            FIGURA AD 8 COLORI 320x256               *
  450. ; **************************************************************************
  451.  
  452. ;    Ricordatevi di selezionare la directory dove si trova la figura
  453. ;    in questo caso basta scrivere: "V df0:SORGENTI2"
  454.  
  455.  
  456. PIC:
  457.     incbin    "amiga.320*256*3"    ; qua carichiamo la figura in RAW,
  458.                     ; convertita col KEFCON, fatta di
  459.                     ; 3 bitplanes consecutivi
  460.  
  461.     end
  462.  
  463. In questo esempio non c'e' nulla di nuovo, ma abbiamo messo insieme molti
  464. degli effetti copper fin qui studiati: Lezione3h.s, Lezione3f.s, Lezione3e.s,
  465. semplicemente caricando quei sorgenti in altri buffer di testo, copiandone la
  466. routine e la parte di copperlist dell'effetto: le routines come si puo' notare
  467. sono una sotto l'altra nell'ordine con cui ho caricato gli esempi, mentre i
  468. wait delle copperlist vanno "AGGIUNTATI" secondo un preciso ordine, in modo che
  469. non si sovrappongano: infatti ho dovuto spostare piu' in altro i wait
  470. dell'effetto Lezione3f.s, mentre gli altri 2 li ho potuti lasciare uguali.
  471. Bastera' poi che nel loop sincronizzato si richiamino le routines:
  472.  
  473.     bsr.w    muovicopper    ; barra rossa sotto linea $ff
  474.     bsr.w    CopperDestSin    ; Routine di scorrimento destra/sinistra
  475.     BSR.w    scrollcolors    ; scorrimento ciclico dei colori
  476.  
  477. Spesso si programmano le singole routines separatamente per poi metterle
  478. insieme come in questo esempio; e' bene esercitarsi a montare e smontare
  479. demo grafiche come in questo esempio, perche' in fondo buona parte della
  480. programmazione e' costitutita dal montaggio delle routines. Ogni routine poi
  481. puo' essere riutilizzata in molti listati, con semplici modifiche: per
  482. esempio il programmatore dei TEAM 17 sicuramente ha usato le stesse routines
  483. di gestione joystick e di caricamento da disco su tutti i suoi giochi, e
  484. probabilmente le routines che spostano i personaggi sullo schermo sono
  485. derivate l'una dall'altra con poche modifiche. Ogni routine che programmate
  486. o che trovate in giro puo' servirvi molte volte, sia come esempio sia per
  487. metterla proprio in vostri programmi. Se aveste tutte le routines necessarie
  488. alla programmazione di un gioco separate, ipotizziamo un joystick.s, un
  489. caricadisco.s, un suonamusica.s, un scrollaschermo.s, eccetera, fare il
  490. gioco si limiterebbe ad una operazione simile a chi apparecchia la tavola:
  491. cioe' mettere i tovaglioli, i piatti, le posate al punto giusto, cosi'
  492. dovreste mettere insieme il gioco come un puzzle, cosa che richiederebbe
  493. comunque la conoscenza almeno del funzionamento delle routines.
  494. Il problema di tante demo e di tanti giochi infatti sta nel fatto che le
  495. routines sono ben combinate, la grafica e il suono se le sono fatte, ma
  496. viene il sospetto che le routines provengano da altri programmatori, rubate
  497. o concesse. D'altronde se il gioco funziona, cosa importa? Sara' sempre
  498. un bel gioco ma simile a qualche altro, un incrocio. Quando le routines
  499. uno se le programma da solo, si riconosce sempre perche' o le ha fatte peggio
  500. degli altri, o le ha fatte meglio. Dunque i giochi brutti e quelli bellissimi
  501. sono i piu' "ONESTAMENTE" programmati. Ma vi consiglio di lasciare da parte
  502. l'orgoglio per ora che state imparando, non credo che possiate innovare la
  503. programmazione Amiga ora! Dunque scomponete e riaggiuntate le routines che
  504. trovate nel corso come in questo listato, lo scopo e' imparare, e non c'e'
  505. modo migliore di imparare che aggiuntare e smontare routines. Basta che
  506. poi non andiate in giro con le MIE routines a dire che le avete programmate
  507. voi del tutto. Quando avrete finito questo corso, allora sarete in grado di
  508. farvele, e magari di avere idee innovative, l'assembler non pone limiti.
  509.  
  510.